function    A205()
format long;

% 假设检验：以小概率原理为基础，根据一定假设条件由样本推断总体，包括参数、正态分布参数等检验方法。

% 参数检验
% 已知数据分布，对数据分布的参数是否落在相应范围内进行检验。
% 单个正态总体的假设检验，sigma2已知，对期望mu0的假设检验-z检验
mu0_1 = 100;       % 原假设中的mu0_1为100
sigma1 = 2;        % 总体标准差
Alpha1 = 0.05;     % 显著性水平
% 定义样本观测值向量
x1 = [96 99 105 103 99 100 102 97 100 95 105 98 102 100 103 101];   
% 调用ztest函数对x1做总体均值的双侧检验（默认），返回变量h1，检验的p1值，
% 均值的置信区间muci1，检验统计量的观测值zval1 
[h1, p1, muci1, zval1] = ztest(x1, mu0_1, sigma1, Alpha1);
% 假设检验的可视化
subplot(3, 2, 1)
errorbar(0, mu0_1, sigma1, 'r*');
hold on
num1 = 1: length(x1);
plot(num1, x1, 'b.');
for i = 1: length(x1)
    show_muci_low1(i) = muci1(1);
    show_muci_up1(i) = muci1(2);
end
plot(num1, show_muci_low1, 'g-', num1, show_muci_up1, 'g--');
hold off
set(gca, 'Fontsize', 12);
legend('原假设的期望与总体标准差', '检验数据', '均值的置信区间下限', '均值的置信区间上限');
title(['单正态总体的期望假设z检验（H=', num2str(h1),'，p=', num2str(p1), '）']);

% 单个正态总体的假设检验sigma2未知，对期望mu0的假设检验—t检验法
mu0_2 = 50;        % 原假设中的均值u0_2=50
Alpha2 = 0.05;     % 显著性水平alpha2 
x2=[49.9 50.5 50.7 51.7 49.8 47.9 49.2 51.4 48.9];   % 定义样本观测值向量
% 调用ttest函数做总体均值的双侧检验，返回变量h2，检验值p2，均值的置信空间muci2，结构体变量stats2 
[h2, p2, muci2, stats2] = ttest(x2, mu0_2, Alpha2);
% 假设检验的可视化
subplot(3, 2, 2)
num2 = 1: length(x2);
plot(0, mu0_2, 'r*', num2, x2, 'b.');
hold on
for i = 1: length(x2)
    show_muci_low2(i) = muci2(1);
    show_muci_up2(i) = muci2(2);
end
plot(num2, show_muci_low2, 'g-', num2, show_muci_up2, 'g--');
hold off
set(gca, 'Fontsize', 12);
legend('原假设的期望' , '检验数据', '均值的置信区间下限', '均值的置信区间上限');
title(['单正态总体的期望假设t检验（H=', num2str(h2),'，p=', num2str(p2), '）']);

% 总体均值未知时，单个正态总体方差的卡方检验
x3 = [49.9, 50.5, 50.7, 51.7, 49.8, 47.9, 49.2, 51.4, 48.9];  % 样本观测向量
var3=1.5;                % 原假设中的方差
Alpha3 = 0.05;           % 显著性水平
tail3 = 'both';          % 尾部类型为双侧
% 调用vartest函数作单个正态总体方差的双侧检验，返回值变量h3，检验值p3，
% 方差的置信区间varci3，结构体变量stats3
[h3, p3, varci3, stats3] = vartest(x3, var3, Alpha3, tail3);
% 假设检验的可视化
subplot(3, 2, 3)
num3 = 1: length(x3);
plot(num3, x3, 'b.');
hold on
for i = 1: length(x3)
    show_varci_low3(i) = varci3(1);
    show_varci_up3(i) = varci3(2);
end
plot(num3, show_varci_low3, 'g-', num3, show_varci_up3, 'g--');
hold off
set(gca, 'Fontsize', 12);
legend('检验数据', '方差的置信区间下限', '方差的置信区间上限');
title(['单正态总体方差的卡方检验（H=', num2str(h3),'，p=', num2str(p3), '）']);

% 总体标准差未知时，两正态总体均值的比较，即两独立样本的t检验（t检验）
% 两个正态总体均值差的检验
x4 = [20.1, 20.0, 19.3, 20.6, 20.2, 19.9, 20.0, 19.9, 19.1, 19.9];   % 定义样本1观测值向量
y4 = [18.6, 19.1, 20.0, 20.0, 20.0, 19.7, 19.9, 19.6, 20.2];         % 定义样本2观测值向量
Alpha4 = 0.05;                                           % 定义显著性水平
tail4 = 'both';                                          % 尾部类型为双侧
vartype4 = 'equal';                                      % 方差类型为等方差
% 调用ttest2函数作两个正态总体均值的比较检验，返回变量h，检验的p值，均值差的置信区间，结构体变量stats
[h4, p4, muci4, stats4] = ttest2(x4, y4, Alpha4, tail4, vartype4);
% 假设检验的可视化
subplot(3, 2, 4)
num_x4 = 1: length(x4);
num_y4 = 1: length(y4);
plot(num_x4, x4, 'b.', num_y4, y4, 'bo');
hold on
for i = 1: length(x4)
    show_muci_low4(i) = muci4(1);
    show_muci_up4(i) = muci4(2);
end
plot(num_x4, show_muci_low4, 'g-', num_x4, show_muci_up4, 'g--');
hold off
set(gca, 'Fontsize', 12);
legend('样本1数据', '样本2数据', '均值差的置信区间下限', '均值差的置信区间上限');
title(['两独立样本的t检验（H=', num2str(h4), '，p=', num2str(p4), '）']);

% 总体均值未知时，两正态总体方差的比较F检验
x5 = [20.1, 20.0, 19.3, 20.6, 20.2, 19.9, 20.0, 19.9, 19.1 19.9];  % 定义样本1观测值向量
y5 = [18.6, 19.1, 20.0, 20.0, 20.0, 19.7, 19.9, 19.6, 20.2];       % 定义样本2观测值向量
Alpha5 = 0.05;           % 显著性水平
tail5 = 'both';          % 尾部类型为双侧
[h5, p5, varci5, stats5] = vartest2(x5, y5, Alpha5, tail5)
% 假设检验的可视化
subplot(3, 2, 5)
num_x5 = 1: length(x5);
num_y5 = 1: length(y5);
plot(num_x5, x5, 'b.', num_y5, y5, 'bo');
hold on
for i = 1: length(x5)
    show_varci_low5(i) = varci5(1);
    show_varci_up5(i) = varci5(2);
end
plot(num_x5, show_varci_low5, 'g-', num_x5, show_varci_up5, 'g--');
hold off
set(gca, 'Fontsize', 12);
legend('样本1数据', '样本2数据', '方差比的置信区间下限', '方差比的置信区间上限');
title(['两正态总体方差的比较F检验（H=', num2str(h5), '，p=', num2str(p5), '）']);

% 显著性检验，在控制第一类（弃真）错误的概率不超过某一水平（显著性水平）的前提下去制约第二类（采伪）错误。
% 检验功效与样本容量：原假设不成立的条件下，检验的功效是拒绝原假设的概率，
% 反映了一个显著性检验够区分原假设和备择假设的能力，
% 通常情况下，应使得检验功效达到一个较高的水平（例如90%以上）。
% 当给定样本容量时可以求得检验功效，样本容量越大，检验功效越高，
% 即区分原假设与备择假设的能力越强；反之，给定检验功效也可求出样本容量。
n6 = 1:60;              % 指定不同的样本容量n6=1，2，...，60
mu6_0=100;              % 原假设对应的总体均值
sigma6_0 = 6.58;        % 原假设对应的标准差
mu6_1=104;              % 备择假设对应的总体均值
% 调用sampsizepwr函数计算不同样本容量对应的检验功效
pow6 = sampsizepwr('z', [mu6_0, sigma6_0], mu6_1, [], n6, 'tail', 'right');
% 调用sampsizepwr函数计算检验功效要达到threshold_pow=0.9时，需要的样本容量至少为low_n6 
threshold_pow = 0.9;
low_n6 = sampsizepwr('z', [mu6_0, sigma6_0], mu6_1, threshold_pow, [], 'tail', 'right');
% 绘制检验功效与样本容量关系曲线
subplot(3, 2, 6)
plot(low_n6, 0.9, 'r*', n6, pow6, 'b-');
xlabel('样本容量');
ylabel('检验功效');
legend(['检验功效为', num2str(threshold_pow), '时，样本容量至少为', num2str(low_n6)], '检验功效与样本容量的关系曲线');
title('检验功效与样本容量');



